//专门处理用户的业务逻辑
// 1. express 框架
const express = require('express');
const fs = require('fs');
const path = require('path');
// 2.创建一个后台路由
const router = express.Router();
// 导入用户数据模块
const userModel = require('../../model/userModel');
// 导入发送邮箱验证码工具函数
const emailApi = require('../../utils/emailApi');
// 导入jwt token工具
const JwtUtil = require('../../utils/jwt');
//导入上传文件的包
const multer = require('multer');
// 导入生成id的包
const { v4: uuidv4 } = require('uuid');

// 邮箱正则表达式
const rep_email = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/

// 接口1: 注册功能（不需要邮箱验证码）
router.post('/register', async (req, res) => {
    // 解构赋值
    let { user_acc, user_pwd, user_name, user_create_time } = req.body;
    // 判断账号是否为邮箱
    // if (rep_email.test(user_acc)) {
    if (user_acc) {
        // 生成随机字符串
        let user_id = uuidv4();
        // 注册用户
        await userModel.register(user_id, user_acc, user_pwd, user_name, user_create_time)
            .then(
                content => {
                    res.send(content);
                }
            )
            .catch(
                error => {
                    res.send(error);
                }
            )
    } else {
        // 数据格式不正确
        res.send({
            code: -1,
            msg: '该账号不是一个邮箱格式。'
        })
    }
})

// 接口5：登录功能（不需要邮箱验证码）
// 参数：user_acc , user_pwd
router.post('/login', async (req, res) => {
    let { user_acc, user_pwd } = req.body;
    if (user_acc == undefined || user_pwd == undefined) {
        res.send({
            code: -1,
            msg: '缺少参数，检查提交的方式是否正确?'
        })
        return;
    }

    if (user_acc == false || user_pwd == false) {
        res.send({
            code: -1,
            msg: '缺少参数，检查提交的方式是否正确?'
        })
        return;
    }
    // 如果用户把手机号码和账号进行绑定了，用户就可以使用手机号码进行登录（本身使用邮箱登录）
    // if (rep_phone.test(user_acc) || rep_email.test(user_acc)) {
    // 用户名有值，直接去登录
    if (user_acc) {
        // 调用登录方法
        await userModel.login(user_acc, user_pwd)
            .then(
                data => {
                    res.send(data)
                }
            )
            .catch(
                err => {
                    res.send({ code: 500, msg: '服务器异常...', err })
                }
            )
    }
    else {
        res.send({
            code: -1,
            msg: '账号格式不正确?'
        })
    }

})

// 接口：删除用户
router.get('/remove', async (req, res) => {
    // 从请求头对象获取token信息
    let token = req.headers['token'] || req.query.token;
    // 判断用户登录状态
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        // 删除用户的API
        let user_id = result.data;
        await userModel.remove(user_id).then(content => {
            res.send(content)
        })
            .catch(err => {
                res.send(err)
            })
    }

})

// 接口：修改用户信息
router.post('/modify',async (req, res)=> {
    let token = req.headers.token;
     // 判断用户登录状态
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    }else {
        let { user_pwd , user_name } = req.body;
        let user_id = result.data;
        await userModel.modify(user_id, user_name, user_pwd).then(content=>{
            res.send(content)
        }).catch(
            err=>{
                res.send(err);
            }
        )
    }
   
})

// 接口：获取用户信息
router.post('/user_info',async (req, res)=> {
    let token = req.headers.token;
     // 判断用户登录状态
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    }else {
        let user_id = result.data;
        await userModel.get_userInfo(user_id).then(content=>{
            res.send(content)
        }).catch(
            err=>{
                res.send(err);
            }
        )
    }
   
})

// 4.把当前路由暴露在模块系统下
module.exports = router;